﻿Imports System.IO
Imports System.Data
Imports MetodosComuns
Imports extranet.BC
Imports extranet.BE
Imports System.Collections.Generic
Imports EnhancedFileUpload

Partial Class Administracao_Videos
  Inherits System.Web.UI.Page

  Private intVideoWidth As Integer
  Private intVideoHeight As Integer

  Private Const DEBUG As Boolean = False
  ' Inicializar parâmetros da Página
  Private Const TITULO_PAGINA As String = "Vídeos"
  Private Const TITULO_REGISTROS As String = "VÍDEOS CADASTRADOS"
  Private Const TITULO_REGISTRO_DETALHE As String = "DETALHES DO VÍDEO"
  Private Const TITULO_REGISTRO_EDICAO As String = "ALTERAR VÍDEO"
  Private Const TITULO_REGISTRO_CADASTRO As String = "CADASTRO DE VÍDEO"
  Private Const MESSAGE_INSERIDO_COM_SUCESSO As String = "O Vídeo foi Cadastrado com Sucesso!"
  Private Const MESSAGE_ALTERADO_COM_SUCESSO As String = "O Vídeo foi Alterado com Sucesso!"
  Private Const MESSAGE_EXCLUIDO_COM_SUCESSO As String = "O Vídeo foi Excluído com Sucesso!"
  Private Const MESSAGE_ERRO_NA_INSERCAO As String = "Erro na inserção do Registro!."
  Private Const MESSAGE_ERRO_NA_ALTERACAO As String = "Erro na atualização do Registro!."
  Private Const MESSAGE_ERRO_NA_EXCLUSAO As String = "Erro na exclusão do Registro!."

  Private Const ROW_RANKING As Integer = 0
  Private Const ROW_TITULO As Integer = 1
  Private Const ROW_DESCRICAO As Integer = 2
  Private Const ROW_CATEGORIA As Integer = 3
  Private Const ROW_IMAGEM As Integer = 4
  Private Const ROW_VIDEO As Integer = 5

  Private Const SORT_INDICE_ARRAY As Integer = 0
  Private Const SORT_REGISTROS As Integer = 0

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    '==================       PROCEDIMENTO  PADRÃO  SEGURANÇA     =============================
    Dim objBESeguranca As BESeguranca
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    If IsNothing(objBEUsuario) Then Response.Redirect(TELA_LOGOUT)
    Session("strTela") = MetodosComuns.GetCurrentPageName()
    If Not IsPostBack Then          ' SEGURANÇA
      objBESeguranca = BCSeguranca.SelecionaPermissoes(objBEUsuario.GrupoAcesso, Session("strTela"))
      If Not objBESeguranca.Autorizado Then Response.Redirect(TELA_LOGOUT)
      Session("objBESeguranca") = objBESeguranca
    Else
      objBESeguranca = Session("objBESeguranca")
    End If

    '==================       ALTERAR SE FOR NECESSARIO          ===============================
    If Not IsPostBack Then
      Dim sortExpression(SORT_INDICE_ARRAY) As String
      Dim sortDirection(SORT_INDICE_ARRAY) As String
      Session(Session("strTela") & "_SortExpression") = sortExpression
      Session(Session("strTela") & "_SortDirection") = sortDirection

      lblTituloCadastro.Text = TITULO_PAGINA
      With objBESeguranca
        If Not .Escrita Then btnCadastrar.Visible = False
      End With
      mostraPaineis(ESTADO_INICIAL)
    End If

  End Sub

  Protected Sub Page_SaveStateComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SaveStateComplete
    setTrigger()
  End Sub

  Protected Sub mostraMensagemDeErro(ByVal message As String)
    lblErro.Visible = True
    lblErro.Text = message
  End Sub

  Protected Sub mostraMensagemDeErroNaImagem(ByVal message As String)
    lblErroImagem.Visible = True
    lblErroImagem.Text = message
  End Sub

  Protected Sub mostraPaineis(ByVal estado As Int16, ByVal message As String)
    mostraPaineis(estado)
    lblSucesso.Visible = True
    lblSucesso.Text = message
  End Sub

  Protected Sub mostraPaineisComErro(ByVal estado As Int16, ByVal message As String)
    mostraPaineis(estado)
    lblErro.Visible = True
    lblErro.Text = message
  End Sub

  Protected Sub mostraPaineis(ByVal estado As Int16)
    Dim objBESeguranca As BESeguranca = DirectCast(Session("objBESeguranca"), BESeguranca)
    lblSucesso.Visible = False
    lblErro.Visible = False

    ' SEGURANÇA
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        If Not objBESeguranca.Leitura Then estado = IIf(objBESeguranca.Escrita, ESTADO_CADASTRO, ESTADO_BLOQUEADO)
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
        If Not objBESeguranca.Escrita Then estado = IIf(objBESeguranca.Leitura, ESTADO_LISTA, ESTADO_BLOQUEADO)
    End Select

    ' Set Título do painel
    setTitulo(estado)

    ' Set Indice do Registro selecionado na lista de Registros
    grvRegistros.Enabled = (Not estado = ESTADO_BLOQUEADO)
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        grvRegistros.SelectedIndex = -1
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
        grvRegistros.SelectedIndex = -1
    End Select

    ' Set o estado do Data View
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        dtvRegistro.ChangeMode(DetailsViewMode.ReadOnly)
      Case ESTADO_DETALHE
        dtvRegistro.ChangeMode(DetailsViewMode.ReadOnly)
      Case ESTADO_EDICAO
        dtvRegistro.ChangeMode(DetailsViewMode.Edit)
      Case ESTADO_CADASTRO
        dtvRegistro.ChangeMode(DetailsViewMode.Insert)
    End Select

    ' Mostra Painel segundo o estado
    If Not DEBUG Then
      Select Case estado
        Case ESTADO_BLOQUEADO
          panBuscaRegistro.Visible = False
          pangrvRegistros.Visible = False
          pandtvRegistro.Visible = False
        Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
          panBuscaRegistro.Visible = True
          pangrvRegistros.Visible = True
          pandtvRegistro.Visible = False
        Case ESTADO_DETALHE, ESTADO_EDICAO, ESTADO_CADASTRO
          panBuscaRegistro.Visible = False
          pangrvRegistros.Visible = False
          pandtvRegistro.Visible = True
      End Select
    Else
      panBuscaRegistro.Visible = True
      pangrvRegistros.Visible = True
      pandtvRegistro.Visible = True
    End If

    ' Set Registro(s) segundo o estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        mostraRegistros()
      Case ESTADO_DETALHE, ESTADO_EDICAO
        mostraRegistro()
      Case ESTADO_CADASTRO
    End Select

    ' Set Focus segundo o Estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        scriptManager.SetFocus(txtVideo)
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
    End Select

  End Sub

  Protected Sub setTitulo(ByVal estado As Int16)
    ' Set Título do painel
    Select Case estado
      Case ESTADO_BLOQUEADO, ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        grvRegistros.Caption = TITULO_REGISTROS
      Case ESTADO_DETALHE
        dtvRegistro.Caption = TITULO_REGISTRO_DETALHE
      Case ESTADO_EDICAO
        dtvRegistro.Caption = TITULO_REGISTRO_EDICAO
      Case ESTADO_CADASTRO
        dtvRegistro.Caption = TITULO_REGISTRO_CADASTRO
    End Select
  End Sub

  Protected Sub btnAdministrarCategoriasVideos_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdministrarCategoriasVideos.Click
    Response.Redirect(MetodosComuns.GetVirtualPath & "/videos/AdmCategoriasVideos.aspx")
  End Sub

  Protected Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub btnCadastrar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCadastrar.Click
    mostraPaineis(ESTADO_CADASTRO)
  End Sub

  Protected Sub grvRegistros_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles grvRegistros.PageIndexChanging
    grvRegistros.PageIndex = e.NewPageIndex
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub grvRegistros_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles grvRegistros.Sorting
    setSorting(SORT_REGISTROS, e)
    e.Cancel = True
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub grvRegistros_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grvRegistros.SelectedIndexChanged
    mostraPaineis(ESTADO_DETALHE)
  End Sub

  Protected Sub vp_Video_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    BCVideo.Ranking(grvRegistros.SelectedDataKey("IdVideo"))
  End Sub

  Protected Sub finalizaConsultaItem(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub btnSelecionarImagem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim intTempo As Integer = 0
    Dim intDuracao As Integer = 1
    Dim vuVideo As VideoUpload = dtvRegistro.Rows(ROW_VIDEO).FindControl("vu_Video")
    vuVideo.ThumbToSave = False
    If File.Exists(HttpContext.Current.Server.MapPath("~/videos/video/" & vuVideo.VideoName & ".xml")) Then
      Dim dsVideoXML As New XmlDataSource()
      dsVideoXML.DataFile = "~/videos/video/" & vuVideo.VideoName & ".xml"
      intDuracao = ConverteTextoParaDecimal(dsVideoXML.GetXmlDocument.GetElementsByTagName("duration")(0).ChildNodes(0).Value) * 0.1
    End If
    Session("vuVideo") = vuVideo
    dtvRegistro.Rows(ROW_VIDEO).FindControl("div_Video").Visible = False
    'Session("tempoInicial") = intTempoInicial
    intTempo += intDuracao
    imb_01.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_01.Visible = True
    intTempo += intDuracao
    imb_02.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_02.Visible = True
    intTempo += intDuracao
    imb_03.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_03.Visible = True
    intTempo += intDuracao
    imb_04.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_04.Visible = True
    intTempo += intDuracao
    imb_05.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_05.Visible = True
    intTempo += intDuracao
    imb_06.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_06.Visible = True
    intTempo += intDuracao
    imb_07.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_07.Visible = True
    intTempo += intDuracao
    imb_08.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_08.Visible = True
    intTempo += intDuracao
    imb_09.ImageUrl = "~/videos/showImageFromVideo.aspx?time=" & intTempo
    imb_09.Visible = True
    mpeSelecao.Show()
  End Sub

  Protected Sub imb_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
    Dim nomeImagem As String = DirectCast(dtvRegistro.Rows(ROW_IMAGEM).FindControl("lbl_imagem"), Label).Text
    Try
      lblErroImagem.Visible = False
      Dim objImb As ImageButton = sender
      Dim vuVideo As VideoUpload = Session("vuVideo")
      vuVideo.ThumbToSave = True

      vuVideo.ThumbName = vuVideo.VideoName
      vuVideo.ThumbTime = objImb.ImageUrl.Substring(objImb.ImageUrl.IndexOf("=") + 1)

      vuVideo.ThumbWidth = 0
      vuVideo.ThumbHeight = 0
      vuVideo.ThumbPath = "~/videos/startImage"
      vuVideo.extractThumb()

      vuVideo.ThumbName = nomeImagem
      vuVideo.ThumbWidth = THUMBNAIL_WIDTH
      vuVideo.ThumbHeight = THUMBNAIL_HEIGHT
      vuVideo.ThumbPath = "~/videos/thumb"
      vuVideo.extractThumb()

      vuVideo.ThumbToSave = False

      Dim objBEVideo As New BEVideo()
      objBEVideo.Imagem = vuVideo.ThumbName
      BCVideo.AtualizarImagem(objBEVideo)

      DirectCast(dtvRegistro.Rows(ROW_IMAGEM).FindControl("img_Video"), Image).ImageUrl = objImb.ImageUrl
      btnFecharSelecao_Click(Nothing, Nothing)
      mpeSelecao.Hide()
    Catch ex As Exception
      mostraMensagemDeErroNaImagem("Erro na Seleção da Imagem; " & nomeImagem & "<br/>" & ex.Message)
    End Try
  End Sub

  Protected Sub btnFecharSelecao_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFecharSelecao.Click
    imb_01.ImageUrl = ""
    imb_01.Visible = False
    imb_02.ImageUrl = ""
    imb_02.Visible = False
    imb_03.ImageUrl = ""
    imb_03.Visible = False
    imb_04.ImageUrl = ""
    imb_04.Visible = False
    imb_05.ImageUrl = ""
    imb_05.Visible = False
    imb_06.ImageUrl = ""
    imb_06.Visible = False
    imb_07.ImageUrl = ""
    imb_07.Visible = False
    imb_08.ImageUrl = ""
    imb_08.Visible = False
    imb_09.ImageUrl = ""
    imb_09.Visible = False
    dtvRegistro.Rows(ROW_VIDEO).FindControl("div_Video").Visible = True
    Session("vuVideo") = Nothing
  End Sub

  Protected Sub btnAlterar_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_EDICAO)
  End Sub

  Protected Sub btnCancelarAlteracao_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_DETALHE)
  End Sub

  Protected Sub btnCancelarCadastro_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_INICIAL)
  End Sub

  Protected Property IsInEditMode() As Boolean
    Get
      Return Not (dtvRegistro.CurrentMode = DetailsViewMode.ReadOnly)
    End Get
    Set(ByVal value As Boolean)
    End Set
  End Property

  Protected Property VideoWidth() As Integer
    Get
      Return intVideoWidth
    End Get
    Set(ByVal value As Integer)
    End Set
  End Property

  Protected Property VideoHeight() As Integer
    Get
      Return intVideoHeight
    End Get
    Set(ByVal value As Integer)
    End Set
  End Property

  Protected Sub dtvRegistro_ModeChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewModeEventArgs) Handles dtvRegistro.ModeChanging
    e.NewMode = dtvRegistro.CurrentMode
  End Sub

  Protected Sub dtvRegistro_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtvRegistro.DataBound
    Dim objBESeguranca As BESeguranca = DirectCast(Session("objBESeguranca"), BESeguranca)
    Dim mc As New MetodosComuns
    Select Case dtvRegistro.CurrentMode

      Case DetailsViewMode.Insert         ' MODO de INSERÇÃO
        If Not objBESeguranca.Leitura Then dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnCancelarCadastro").Visible = False
        scriptManager.SetFocus(dtvRegistro.Rows(0).FindControl("txt_Titulo"))
        setTitulo(ESTADO_CADASTRO)

      Case DetailsViewMode.Edit           ' MODO de EDIÇÃO
        With dtvRegistro.Rows(ROW_VIDEO)
          DirectCast(.FindControl("rfv_Video"), RequiredFieldValidator).Enabled = Not (DirectCast(.FindControl("lbl_video"), Label).Text.Trim().Length > 0)
        End With
        scriptManager.SetFocus(dtvRegistro.Rows(0).FindControl("txt_Titulo"))
        setTitulo(ESTADO_EDICAO)

      Case DetailsViewMode.ReadOnly       ' MODO de LEITURA
        With objBESeguranca
          If dtvRegistro.Rows.Count Then
            If Not .Exclusao Then dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnExcluir").Visible = False
            If Not .Modificacao Then dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnAlterar").Visible = False
          End If
        End With
        If (dtvRegistro.Rows.Count > 0) Then
          scriptManager.SetFocus(dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnOk"))
        End If
        setTitulo(ESTADO_DETALHE)

    End Select
  End Sub

  Protected Sub ddl_Categoria_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    DirectCast(sender, DropDownList).DataSource = BCCategoriaVideo.Selecionar("", "", "")
  End Sub

  Protected Sub dtvRegistro_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dtvRegistro.ItemInserting
    If verificaInformacao() AndAlso processaRegistro() Then dtvRegistro_ItemInserted(sender, Nothing)
  End Sub

  Protected Sub dtvRegistro_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dtvRegistro.ItemInserted
    If e IsNot Nothing Then e.ExceptionHandled = True
    mostraPaineis(ESTADO_INICIAL, MESSAGE_INSERIDO_COM_SUCESSO)
  End Sub

  Protected Sub dtvRegistro_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles dtvRegistro.ItemUpdating
    If verificaInformacao() AndAlso processaRegistro() Then dtvRegistro_ItemUpdated(sender, Nothing)
  End Sub

  Protected Sub dtvRegistro_ItemUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdatedEventArgs) Handles dtvRegistro.ItemUpdated
    Dim strVideo As String = txtVideo.Text
    Dim strCategoria As String = txtCategoria.Text
    If e IsNot Nothing Then e.ExceptionHandled = True
    If (LocalizaStringsNoTexto(strVideo, DirectCast(dtvRegistro.Rows(ROW_TITULO).FindControl("txt_Titulo"), TextBox).Text) And _
        LocalizaStringsNoTexto(strVideo, DirectCast(dtvRegistro.Rows(ROW_DESCRICAO).FindControl("txt_Descricao"), TextBox).Text) And _
        LocalizaStringsNoTexto(strCategoria, DirectCast(dtvRegistro.Rows(ROW_CATEGORIA).FindControl("ddl_IdCategoria"), DropDownList).SelectedItem.Text)) Then
      mostraPaineis(ESTADO_DETALHE, MESSAGE_ALTERADO_COM_SUCESSO)
    Else
      mostraPaineis(ESTADO_LISTA, MESSAGE_ALTERADO_COM_SUCESSO)
    End If
  End Sub

  Protected Sub dtvRegistro_ItemDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewDeleteEventArgs) Handles dtvRegistro.ItemDeleting
    Try
      Dim objBEVideo As New BEVideo()
      objBEVideo.IdVideo = DirectCast(sender, DetailsView).DataKey("IdVideo")
      objBEVideo.Diretorio = HttpContext.Current.Server.MapPath("~/videos")
      BCVideo.Excluir(objBEVideo)
      dtvRegistro_ItemDeleted(sender, Nothing)
    Catch ex As Exception
      mostraPaineisComErro(ESTADO_DETALHE, MESSAGE_ERRO_NA_EXCLUSAO)
    End Try
  End Sub

  Protected Sub dtvRegistro_ItemDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewDeletedEventArgs) Handles dtvRegistro.ItemDeleted
    If e IsNot Nothing Then e.ExceptionHandled = True
    mostraPaineis(ESTADO_LISTA, MESSAGE_EXCLUIDO_COM_SUCESSO)
  End Sub

  Protected Sub mostraRegistros()
    grvRegistros.DataSource = BCVideo.Selecionar(txtVideo.Text, txtCategoria.Text, "", _
                                                 Session(Session("strTela") & "_SortExpression")(SORT_REGISTROS), _
                                                 Session(Session("strTela") & "_SortDirection")(SORT_REGISTROS))
    grvRegistros.DataBind()
  End Sub

  Protected Sub mostraRegistro()
    dtvRegistro.DataSource = BCVideo.Selecionar(grvRegistros.SelectedDataKey("IdVideo"))
    dtvRegistro.DataBind()
    intVideoWidth = DirectCast(dtvRegistro.DataSource, List(Of BEVideo))(0).Width
    intVideoHeight = DirectCast(dtvRegistro.DataSource, List(Of BEVideo))(0).Height
    CalculaDimensionesProporcionais(intVideoWidth, intVideoHeight, VIDEO_WIDTH, VIDEO_HEIGHT)
  End Sub

  Protected Sub setTrigger()
    Dim trigger As New PostBackTrigger()
    Dim scm As ScriptManager = scriptManager.GetCurrent(Me.Page)
    Dim ctrl As Control
    If Not dtvRegistro.CurrentMode = DetailsViewMode.ReadOnly Then
      ctrl = dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl(IIf(dtvRegistro.CurrentMode = DetailsViewMode.Insert, "btnCadastrar", "btnAtualizar"))
      trigger.ControlID = ctrl.ClientID
      updPanel.Triggers.Add(trigger)
      scm.RegisterPostBackControl(ctrl)
    End If
  End Sub

  Protected Function verificaInformacao() As Boolean
    Dim boolProcessa As Boolean = True
    If Not boolProcessa Then
    End If
    Return boolProcessa
  End Function

  Protected Function processaRegistro() As Boolean
    Dim boolInsercao As Boolean = (dtvRegistro.CurrentMode = DetailsViewMode.Insert)
    Dim objBEVideo As New BEVideo()
    Dim booSucesso As Boolean = True
    Try
      Dim strImagem As String = DirectCast(dtvRegistro.Rows(ROW_IMAGEM).FindControl("lbl_imagem"), Label).Text
      Dim vuVideo As VideoUpload = dtvRegistro.Rows(ROW_VIDEO).FindControl("vu_Video")
      Dim iuImagem As ImageUpload = dtvRegistro.Rows(ROW_IMAGEM).FindControl("iu_Imagem")
      If vuVideo.HasFile() Then
        If vuVideo.VideoName.Trim().Length <= 0 Then
          vuVideo.VideoName = Path.GetFileNameWithoutExtension(Path.GetTempFileName()).Replace("tmp", "fit4_")
        End If
        If Not iuImagem.HasFile() AndAlso strImagem.Trim().Length = 0 Then
          vuVideo.ThumbToSave = True
        End If
        ' Tratamento do Vídeo
        vuVideo.saveVideo()
        If vuVideo.ThumbToSave Then
          vuVideo.ThumbName = vuVideo.VideoName

          vuVideo.ThumbWidth = 0
          vuVideo.ThumbHeight = 0
          vuVideo.ThumbPath = "~/videos/startImage"
          vuVideo.extractThumb()

          vuVideo.ThumbName = vuVideo.VideoName
          vuVideo.ThumbWidth = THUMBNAIL_WIDTH
          vuVideo.ThumbHeight = THUMBNAIL_HEIGHT
          vuVideo.ThumbPath = "~/videos/thumb"
          vuVideo.extractThumb()

          strImagem = vuVideo.ThumbName
          vuVideo.ThumbToSave = False
        End If
      Else
        vuVideo.VideoWidth = dtvRegistro.DataKey("Width")
        vuVideo.VideoHeight = dtvRegistro.DataKey("Height")
      End If

      If iuImagem.HasFile() Then
        iuImagem.ImageName = vuVideo.VideoName
        iuImagem.saveImage()
        strImagem = iuImagem.ImageName
      End If

      With objBEVideo
        .Diretorio = HttpContext.Current.Server.MapPath("~/videos")
        .IdVideo = dtvRegistro.DataKey("IdVideo")
        .Video = vuVideo.VideoName
        .Imagem = strImagem
        .Titulo = DirectCast(dtvRegistro.Rows(ROW_TITULO).FindControl("txt_Titulo"), TextBox).Text
        .Descricao = DirectCast(dtvRegistro.Rows(ROW_DESCRICAO).FindControl("txt_Descricao"), TextBox).Text
        .Categoria = New BECategoriaVideo(DirectCast(dtvRegistro.Rows(ROW_CATEGORIA).FindControl("ddl_IdCategoria"), DropDownList).SelectedValue, "")
        .Usuario = Session("objBEUsuario")
        .Width = vuVideo.VideoWidth
        .Height = vuVideo.VideoHeight
      End With
      If boolInsercao Then
        BCVideo.Cadastrar(objBEVideo)
      Else
        BCVideo.Atualizar(objBEVideo)
      End If
      BCVideo.AtualizarImagem(objBEVideo)
      GerarXmlVideo(objBEVideo)
    Catch ex As Exception
      mostraMensagemDeErro(IIf(boolInsercao, MESSAGE_ERRO_NA_INSERCAO, MESSAGE_ERRO_NA_ALTERACAO) & "<br/>" & ex.Message)
      booSucesso = False
    End Try
    Return booSucesso
  End Function

  '=========****************                                     ****************=========

  Protected Sub setSorting(ByVal intTipo As Integer, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs)
    If (Session(Session("strTela") & "_SortExpression")(intTipo) Is Nothing OrElse _
        Session(Session("strTela") & "_SortDirection")(intTipo) Is Nothing OrElse _
        Session(Session("strTela") & "_SortExpression")(intTipo) <> e.SortExpression OrElse _
        Session(Session("strTela") & "_SortDirection")(intTipo) = "DESC") Then
      Session(Session("strTela") & "_SortDirection")(intTipo) = "ASC"
    ElseIf Session(Session("strTela") & "_SortDirection")(intTipo) = "ASC" Then
      Session(Session("strTela") & "_SortDirection")(intTipo) = "DESC"
    End If
    Session(Session("strTela") & "_SortExpression")(intTipo) = e.SortExpression
  End Sub

End Class
